package com.hao.tool.logview.runlog.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

import javax.annotation.PostConstruct;

/**
 * @author sawyerlsy
 * @date 2018-12-28
 * @since
 */
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @PostConstruct
    public void init() {
        System.out.println("WebSocketConfig...");
    }

    /**
     * 将"/sock"路径注册为STOMP端点，这个路径与发送和接收消息的目的路径有所不同，这是一个端点，客户端在订阅或发布消息到目的地址前，要连接该端点，
     * 即用户发送请求url="/applicationName/sock"与STOMP server进行连接。之后再转发到订阅url；
     */
    @Override
    public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
        //设置连接端点、允许连接的域名及支持以socketJs方式连接服务器
        stompEndpointRegistry.addEndpoint("/sock").setAllowedOrigins("*").withSockJS();
    }


    /**
     * 配置消息代理 <br/>
     * 如果不重载，默认情况下回自动配置一个简单的内存消息代理，用来处理以"/topic"为前缀的消息。
     * 这里重载configureMessageBroker()方法，消息代理将会处理前缀为"/topic"和"/queue"的消息。
     */
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {

        //这里设置的simple broker是指可以订阅的地址，也就是服务器可以发送的地址
        registry.enableSimpleBroker("/topic", "/self");

        //客户端向服务器发送消息的前缀
        registry.setApplicationDestinationPrefixes("/app");

        //给指定用户发送一对一消息的前缀
        registry.setUserDestinationPrefix("/self");
    }
}
